﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Capa_Entidad;
using Capa_Negocio_Interface;
using Capa_Negocio_Facade;

public partial class Clinica_wfAtencionExamenEspecialidad : System.Web.UI.Page
{
    private IFacadeRegistrarAtencion FacadeRegistrarAtencion;
    private ListaExamenEspecialidades objLEE;
    private List<ListaExamenEspecialidades> ListExamenEspec = null;
    private IEnumerable<Object> lista = null;
    private static String strMsg, strTitulo;


    protected void Page_Load(object sender, EventArgs e)
    {

        try
        {
            if (!IsPostBack)
            {
             
               
                if (Session["Ate_Operacion"] == null )
                {
                    Response.Redirect("wfAtencionListado.aspx");
                    return;
                }

                ObtenerDatos();

            }
            CargarDatosLista();
        }
        catch (Exception ex)
        {
            strTitulo = "ERROR AL CARGAR LA PAGINA";
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            MostrarComentario(strMsg, strTitulo);
        }
    }

    private void ObtenerDatos()
    {
        try
        {
            int? idAtencion = null;
            idAtencion = (Session["IDAtencion"] != null) ? Convert.ToInt32(Session["IDAtencion"]) : idAtencion;
            lista = new List<Object>();

            if (idAtencion == null)
            {
                FacadeRegistrarAtencion = new FacadeRegistrarAtencion();
                lista = FacadeRegistrarAtencion.ListarAtencionExamenes(idAtencion);
            }

            String Exam_Operacion = (lista == null || lista.Count() == 0) ? "C" : "M";

            Session["Exam_Operacion"] = Exam_Operacion;

            if (Exam_Operacion == "M")
            {
                grdExamenEspec.DataSource = lista;
                grdExamenEspec.DataBind();
                /*
                Para Modificar
                List<ATE_ATENCION_EXAMEN> listaAtencionExamen = (List<ATE_ATENCION_EXAMEN>)lista;
                String idPro, descrip, nroOrden;
                DateTime? fecha = null;
                idPro = listaAtencionExamen[0].PRO_ID_PROCEDIMIENTO.ToString();
                descrip = listaAtencionExamen[0].ATE_DESCRIPCION;
                nroOrden = listaAtencionExamen[0].ATE_ORDEN_NRO;
                fecha = listaAtencionExamen[0].ATE_FECHA;
                */
            }

        }
        catch (Exception ex)
        {

            strTitulo = "ERROR AL OBTENER LOS DATOS.";
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            MostrarComentario(strMsg, strTitulo);
        }
    }

    protected void AgregarListado(object sender, EventArgs e)
    {
        AgregarListado();
    }

    private void AgregarListado()
    {
        try
        {
            if (!ValidarCampos()) return;
            if (!AgregarDatosListado()) return;

        }
        catch (Exception ex)
        {
            strTitulo = "ERROR AL AGREGAR AL LISTADO";
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            MostrarComentario(strMsg, strTitulo);
        }
    }

    private Boolean ValidarCampos()
    {
        Boolean boolValidarCampos = true;
        try
        {
            if (txtidPro.Text.Trim() == String.Empty)
            {
                boolValidarCampos = false;
                strMsg = "Debe Seleccionar Un Procedimiento.";
            }
            else if (txtDescripcion.Text.Trim() == String.Empty)
            {
                boolValidarCampos = false;
                strMsg = "Debe Ingresar Una Descripcion.";
            }
            else if (dtpFecha.Date == null)
            {
                boolValidarCampos = false;
                strMsg = "Debe Selecciona Una Fecha.";
            }
            else if (txtNroOrden.Text.Trim() == String.Empty)
            {
                boolValidarCampos = false;
                strMsg = "Debe Ingresar Un Nro de ORden.";
            }
        }
        catch (Exception ex)
        {
            boolValidarCampos = false;
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
        }

        if (!boolValidarCampos)
        {
            strTitulo = "ERROR AL VALIDAR LOS CAMPOS";
            MostrarComentario(strMsg, strTitulo);
        }
        return boolValidarCampos;
    }

    private Boolean AgregarDatosListado()
    {
        Boolean boolAgregarDatosListado = true;
        try
        {
            String idPro, descrip, nroOrden;
            DateTime? fecha = null;

            idPro = txtidPro.Text.Trim();
            descrip = txtDescripcion.Text.Trim();
            nroOrden = txtNroOrden.Text.Trim();
            fecha = dtpFecha.Date;

            objLEE = new ListaExamenEspecialidades();
            objLEE.idPro = idPro;
            objLEE.descrip = descrip;
            objLEE.nroOrden = nroOrden;
            objLEE.fecha = fecha;

            ListExamenEspec = (Session["ListExamenEspec"] != null) ? (List<ListaExamenEspecialidades>)Session["ListExamenEspec"] : new List<ListaExamenEspecialidades>();
            ListExamenEspec.Add(objLEE);
            Session["ListExamenEspec"] = ListExamenEspec;
            CargarDatosLista();
            tabExamenes.ActiveTabIndex = 1;

            txtidPro.Text = String.Empty;
            txtDescripcion.Text = String.Empty;
            txtNroOrden.Text = String.Empty;
            txtProcedimiento.Text = String.Empty;
            dtpFecha.Value = null;

        }
        catch (Exception ex)
        {
            boolAgregarDatosListado = false;
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
        }

        if (!boolAgregarDatosListado)
        {
            strTitulo = "ERROR AL AGREGAR LOS DATOS AL LISTADO";
            MostrarComentario(strMsg, strTitulo);
        }
        return boolAgregarDatosListado;
    }

    private void MostrarComentario(String strMsg)
    {
        CargaAlert(strMsg, "Mensaje");
    }

    private void MostrarComentario(String strMsg, String strTitulo)
    {
        CargaAlert(strMsg, strTitulo);
    }

    private void CargaAlert(String strMsg, String strTitulo)
    {
        pcMensaje.HeaderText = strTitulo;
        lblMensaje.Text = strMsg;
        pcMensaje.ShowOnPageLoad = true;
    }

    protected void AgregarProcedimiento(object sender, EventArgs e)
    {
        AgregarProcedimiento();

    }

    private void AgregarProcedimiento()
    {
        try
        {
            int index = grdProcedimiento.FocusedRowIndex;
            if (index == -1)
            {
                pcProcedimiento.ShowOnPageLoad = true;
                strMsg = "Debe Seleccionar un Procedimiento";
                MostrarComentario(strMsg);
                return;
            }

            String IdPro, desPro;
            IdPro = grdProcedimiento.GetRowValues(index, "PRO_ID_PROCEDIMIENTO").ToString();
            desPro = grdProcedimiento.GetRowValues(index, "PRO_DESCRIPCION").ToString();

            txtProcedimiento.Text = desPro.Trim();
            txtidPro.Text = IdPro.Trim();
        }
        catch (Exception ex)
        {
            strTitulo = "ERROR AL CARGAR LOS PROCEDIMIENTOS";
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            MostrarComentario(strMsg, strTitulo);
        }
    }

    protected void BuscarProcedimiento(object sender, EventArgs e)
    {
        CargaProcedimiento();
    }

    private void CargaProcedimiento()
    {
        try
        {
            lista = new List<Object>();
            FacadeRegistrarAtencion = new FacadeRegistrarAtencion();
            lista = FacadeRegistrarAtencion.ListarProcedimientos();

            if (lista == null || lista.Count() == 0)
            {
                strMsg = "No Hay Procedimientos Registrados.";
                MostrarComentario(strMsg);
                return;
            }

            grdProcedimiento.DataSource = lista;
            grdProcedimiento.DataBind();
            pcProcedimiento.ShowOnPageLoad = true;
        }
        catch (Exception ex)
        {
            strTitulo = "ERROR AL CARGAR LOS PROCEDIMIENTOS";
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            MostrarComentario(strMsg, strTitulo);
        }
    }

    private void CargarDatosLista()
    {
        try
        {
            ListExamenEspec = (Session["ListExamenEspec"] != null) ? (List<ListaExamenEspecialidades>)Session["ListExamenEspec"] : new List<ListaExamenEspecialidades>();

            if (ListExamenEspec == null) return;

            grdExamenEspec.DataSource = ListExamenEspec;
            grdExamenEspec.DataBind();
        }
        catch (Exception ex)
        {
            strTitulo = "ERROR AL CARGAR LOS PROCEDIMIENTOS";
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            MostrarComentario(strMsg, strTitulo);
        }
    }

    private Boolean GrabarExamenEspec()
    {
        Boolean boolGrabarExamenEspec = true;
        try
        {
            int? cant = grdExamenEspec.VisibleRowCount;
            if (cant <= 0)
            {
                boolGrabarExamenEspec = false;
                strMsg = "Debe Agregar Examenes Para Registrar.";
            }
            if (boolGrabarExamenEspec)
            {

                List<ATE_ATENCION_EXAMEN> ListAtencionExamen = new List<ATE_ATENCION_EXAMEN>();
                ListExamenEspec = (Session["ListExamenEspec"] != null) ? (List<ListaExamenEspecialidades>)Session["ListExamenEspec"] : new List<ListaExamenEspecialidades>();
                foreach (ListaExamenEspecialidades item in ListExamenEspec)
                {
                    ATE_ATENCION_EXAMEN objAteAtencion = new ATE_ATENCION_EXAMEN();
                    objAteAtencion.ATE_DESCRIPCION = item.descrip;
                    objAteAtencion.ATE_FECHA = item.fecha;
                    objAteAtencion.PRO_ID_PROCEDIMIENTO = Convert.ToInt32(item.idPro);
                    objAteAtencion.ATE_ORDEN_NRO = item.nroOrden;
                    objAteAtencion.ATE_ID_ATENCION = Convert.ToInt32(Session["IDAtencion"]);
                    ListAtencionExamen.Add(objAteAtencion);
                }

                FacadeRegistrarAtencion = new FacadeRegistrarAtencion();
                boolGrabarExamenEspec = FacadeRegistrarAtencion.Insertar(ListAtencionExamen);

                if (Session["IdCita"].ToString() != "")
                {
                    FacadeRegistrarAtencion.ActualizarEstadoCita(Convert.ToInt16(Session["IdCita"].ToString()), 3);
                }

                if (Session["Exam_Operacion"].ToString() == "C")
                {
                    strMsg = (boolGrabarExamenEspec) ? "Grabacion Exitosa" : "Error Al Grabar.";
                }
                else if (Session["Exam_Operacion"].ToString() == "M")
                {
                    strMsg = (boolGrabarExamenEspec) ? "Actualiacion Exitosa" : "Error Al Actualizar.";
                }
            }
        }
        catch (Exception ex)
        {
            boolGrabarExamenEspec = false;
            strMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
        }
        if (!boolGrabarExamenEspec)
        {
            strTitulo = "ERROR AL GRABAR LOS EXAMENES - ESPECIALIDAD";
            MostrarComentario(strMsg, strTitulo);
        }
        return boolGrabarExamenEspec;
    }

    protected void grdProcedimiento_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        CargaProcedimiento();
    }

    protected void grdProcedimiento_PageIndexChanged(object sender, EventArgs e)
    {
        CargaProcedimiento();
    }

    protected void grdExamenEspec_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        CargarDatosLista();
    }

    protected void grdExamenEspec_PageIndexChanged(object sender, EventArgs e)
    {
        CargarDatosLista();
    }

    protected void btnAceptar_Click(object sender, EventArgs e)
    {

        if (Session["Ate_Operacion"].ToString() == "P")
        {
            return;
        }
        if (!GrabarExamenEspec()) return;
        MostrarComentario(strMsg);
        //Redireccionar
    }

    protected void btCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("wfAtencion.aspx");
    }
}